import Vue from "vue";
import Vuex from "vuex";
import actions from "./actions.js";
import { initState, handleState, getWeekTime } from "../util/index";
import profile from "./profile";

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    // 基本信息
    proId: "2EKT",
    devType: "067",
    devName: "",
    devId: "",
    serviceId: "",
    onState: "",
    sn: "", // 序列号
    model: "",
    os:"1",
    fwv: "", // 固件版本
    hwv: "", // 硬件版本
    mac: "",
    type:"1",
    role: "owner", // 用户角色 owner|family
    // 手机信息
    statusBarHeight: 24,
    network: "online",
    isPad: false, // 是否是pad
    darkMode: false, // 黑暗模式
    browserWidth: 360,
    otaVersion: "",
    bleOn: false, // 手机蓝牙是否开启
    isShare: false, //是否为共享设备，共享设备不能执行OTA升级和删除操作
    connectStatus: -1, // 设备蓝牙连接状态 0-未连接 1-正在连接 2-已连接 3-断连中
    connectOk: 2, // 设备连接认证回调 0-未连接 1-正在连接 2-已连接
    NoControl: true,
    // Profile
    ...initState(profile),
    updating: false, // 骑行数据同步中
    hasNewVersion: false, // 是否有新固件
    // Hag
    abilities: [],
    // 日期
    year: 2021, // 当前年
    month: 0, // 当前月
    day: 1, // 当前日
    // 其他
    position: 0, // 首页滑动位置
    hasUpdateOta: false,
    controlling: false,
    seatedCountThis:0,
    isReconnect: false, // 记录是否点击了重新连接
    reConnectCount: 0 ,// 重新连接的次数
    Bubbleshow:false
    //页面共享数据

    // ModeSwitch: 0,//智能腰托开关
    // lrAirsacPresssure:10,//智能腰托-左右灵敏度
    // midAirsacPresssure:10,//智能腰托-中部灵敏度

    // LRairpressure:10,//左右气压
    // Midairpressure:10,//中部气压

    // sedentaryReminder:1,//久坐提醒开关
    // repeatRemindTimes:"",//重复提醒次
    // takeinReminderTime:"",//入座提醒时
    // repeatRemindTime:"",//提醒间隔时
  },
  mutations: {
    UPDATE_DEVICE_DATA(state, res) {
      handleState(profile, state, res);
    },
    UPDATE_CLOUD_DATA(state, res) {
      handleState(profile, state, res);
    },
    UPDATE_DEVICE_INFO(state, info) {
      info.devId && (state.devId = info.devId);
      info.devName && (state.devName = info.devName);
    },
    UPDATE_STATE(state, { name, value }) {
      state[name] = value;
    },
    commitMock(state, param) {
      // console.log(state);
      // console.log(param);
      const simulateData = dataObj => {
        for (let sid in dataObj) {
          if (!state.hasOwnProperty(sid)) {
            continue;
          }
          for (let cha in dataObj[sid]) {
            if (!state[sid].hasOwnProperty(cha)) {
              continue;
            }
            state[sid][cha] = dataObj[sid][cha];
          }
        }
      };

      if (Ag.isArray(param)) {
        for (let obj of param) {
          Ag.isObject(obj) && simulateData(obj);
        }
      } else if (Ag.isObject(param)) {
        simulateData(param)
        // console.log(simulateData(param));
      }
      setTimeout(() => {
        state.showTaskToast = false;
      }, 1000);
    },
    commitAppData(state, obj) {
      for (let key in obj) {
        if (state.hasOwnProperty(key)) {
          state[key] = obj[key];
        }
      }
    },
    commitHilink(state, obj) {
      // if (!profile.hasOwnProperty(obj.sid)) {
      //   console.hLog("上报数据异常,sid未定义", JSON.stringify(obj));
      //   return;
      // }
      // if (!Ag.isObject(obj.data)) {
      //   console.hLog("上报数据异常,data不为对象结构", JSON.stringify(obj));
      //   return;
      // }

      if (profile.hasOwnProperty(obj.sid)) {
        let contents = {};
        contents.sid = obj.sid;
        contents.data = obj.data;
        handleState(profile, state, contents);
      }
      // for (let cha in obj.data) {
      //   if (!profile[obj.sid].hasOwnProperty(cha)) {
      //     console.hLog("上报数据异常,cha未定义", JSON.stringify(obj));
      //     continue;
      //   }
      //   if (profile[obj.sid][cha].type === "number") {
      //     if (typeof obj.data[cha] !== "number") {
      //       console.hLog(
      //         "上报数据异常,cha数据类型不为number",
      //         JSON.stringify(obj)
      //       );
      //       continue;
      //     }
      //     if (Array.isArray(profile[obj.sid][cha].range)) {
      //       if (profile[obj.sid][cha].range.indexOf(obj.data[cha]) === -1) {
      //         console.hLog(
      //           "上报数据异常,cha的枚举值未录入",
      //           JSON.stringify(obj)
      //         );
      //         continue;
      //       }
      //       state[obj.sid][cha] = obj.data[cha];
      //     } else if (profile[obj.sid][cha].range.constructor === Object) {
      //       if (
      //         obj.data[cha] < profile[obj.sid][cha].range.min ||
      //         obj.data[cha] > profile[obj.sid][cha].range.max
      //       ) {
      //         console.hLog(
      //           "上报数据异常,cha的数字大小超出",
      //           JSON.stringify(obj)
      //         );
      //         continue;
      //       }
      //       state[obj.sid][cha] = obj.data[cha];
      //     }
      //   } else if (profile[obj.sid][cha].type === "string") {
      //     if (typeof obj.data[cha] !== "string") {
      //       console.hLog(
      //         "上报数据异常,cha的数据类型不为string",
      //         JSON.stringify(obj)
      //       );
      //       continue;
      //     }
      //     if (Array.isArray(profile[obj.sid][cha].range)) {
      //       if (profile[obj.sid][cha].range.indexOf(obj.data[cha]) === -1) {
      //         console.hLog(
      //           "上报数据异常,cha的枚举值未录入",
      //           JSON.stringify(obj)
      //         );
      //         continue;
      //       }
      //       state[obj.sid][cha] = obj.data[cha];
      //     } else if (profile[obj.sid][cha].range.constructor === Object) {
      //       let min = profile[obj.sid][cha].range.min || 0;
      //       if (
      //         obj.data[cha].length < min ||
      //         obj.data[cha].length > profile[obj.sid][cha].range.max
      //       ) {
      //         console.hLog(
      //           "上报数据异常,cha的字符长度大小超出",
      //           JSON.stringify(obj)
      //         );
      //         continue;
      //       }
      //       state[obj.sid][cha] = obj.data[cha];
      //     }
      //   } else if (profile[obj.sid][cha].type === "array[object]") {
      //     // 目前没有做数据验证
      //     state[obj.sid][cha] = obj.data[cha];
      //   }
      // }
    }
  },
  getters: {
    // HEADER高度
    headerHeight(state) {
      return state.statusBarHeight + 56;
    },
    imgPath(state) {
      return state.darkMode ? "dark/" : "";
    },
    //折叠屏
    isTahiti(state) {
      return state.isScreenSpreaded && !state.isPad;
    },
    //都为True则连接蓝牙
    canConnect(state) {
      if (state.bleOn && state.devId && state.mac) {
        return true;
      }
      return false;
    },
    canControl(state) {
      return state.connectStatus === 2 && state.connectOk === 2;
    },
    faultCodes(state) {
      let fault = String(state.faultDetection.fault)
        .split("")
        .reverse();
      let codes = [];
      fault.forEach((item, index) => {
        if (Number(item) === 1) {
          codes.push(index);
        }
      });
      return codes;
    }
  },
  actions
});
